package ch.sla.jdbcperflogger.spring; import org.apache.commons.dbcp.BasicDataSource; import org.springframework.beans.BeansException; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.context.annotation.Configuration; import ch.sla.jdbcperflogger.driver.WrappingDriver; @ConditionalOnClass(BasicDataSource.class) @ConditionalOnExpression("${jdbcperflogger.enable:true}") @Configuration public class DbcpDataSourcePostProcessor extends AbstractDataSourcePostProcessor { @Override public Object postProcessBeforeInitialization(final Object bean, final String beanName) throws BeansException { if (bean instanceof BasicDataSource) { final BasicDataSource ds = (BasicDataSource) bean; // avoid to wrap an already wrapped datasource if (!ds.getUrl().startsWith(AbstractDataSourcePostProcessor.JDBC_URL_PREFIX)) { checkVisibleFromDataSource(BasicDataSource.class); checkUnderlyingDriverIsVisible(ds.getDriverClassName()); ds.setUrl("jdbcperflogger:" + ds.getUrl()); ds.setDriverClassName(WrappingDriver.class.getName()); } } return bean; } }